package Servlets;

import Beans.HorarioDoUsuario;
import Beans.Usuario;
import Daos.HorarioDoUsuarioDao;
import Daos.UsuarioDao;
import Validador.ValidaUsuario;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletCadastro extends HttpServlet {

    private String retornadiaSemana(int i) {
        switch (i) {
            case 1:
                return "seg";
            case 2:
                return "ter";
            case 3:
                return "qua";
            case 4:
                return "qui";
            case 5:
                return "sex";
            case 6:
                return "sab";
            case 7:
                return "dom";

        }
        return "seg";
    }

    public void removeSessao(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        session.removeAttribute("usuario");
        session.removeAttribute("erroLogin");
        session.removeAttribute("erroNome");
        session.removeAttribute("erroEmail");
        session.removeAttribute("erroLogin");
        session.removeAttribute("erroSenha");
        session.removeAttribute("erroTelefone1");
        session.removeAttribute("erroTelefone2");
        session.removeAttribute("erroLoginExistente");
        session.removeAttribute("erroSenhaeConfirmarSenha");
        session.removeAttribute("usuarioSetarCampo");
        session.removeAttribute("contadorErroHorarioLivre");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //primeira coisa a fazer:matar a sessao, para nao haver conflitos
        removeSessao(request);







        //pega os dados para salvar no banco de dados
        String nome = request.getParameter("nome");
        String telefone1 = request.getParameter("telefone");
        String telefone2 = request.getParameter("celular");
        String email = request.getParameter("email");
        String senha = request.getParameter("senha");
        String confirmarSenha = request.getParameter("confirmarSenha");
        String login = request.getParameter("login");
        String horarioLivre = null;
        String diaSemana = "seg";



        System.out.println("Telefone1 " + telefone1);
        System.out.println("Telefone2 " + telefone2);


        System.out.println(nome);

        System.out.println(telefone1);
        System.out.println(telefone2);
        System.out.println(email);
        System.out.println(senha);
        System.out.println(login);



        HttpSession sessão = request.getSession(true);

        //usuario para jogar no banco
        Usuario usuario = new Usuario(nome, email, telefone1, telefone2, senha, login);
        //usuario para deixar campos setados, quando o dado esta correto
        Usuario usuarioSetarCampo = new Usuario();


        int contadorErro = 0;
        //classe para validar usuario
        ValidaUsuario validaUsuario = new ValidaUsuario(usuario);
        if (!validaUsuario.validaNome()) {
            sessão.setAttribute("erroNome", "Nome inválido");
            contadorErro++;
        } else {
            usuarioSetarCampo.setNome(nome);
        }

        if (!validaUsuario.validaLogin()) {
            sessão.setAttribute("erroLogin", "Login inválido");
            contadorErro++;
        }


        if (!validaUsuario.validaEmail()) {
            sessão.setAttribute("erroEmail", "Email inválido");
            contadorErro++;
        } else {
            usuarioSetarCampo.setEmail(email);
        }

        if (!validaUsuario.validaSenha()) {
            sessão.setAttribute("erroSenha", "Senha inválida");
            contadorErro++;
        }
        //se confirmar senha estiver diferente de senha
        if (!confirmarSenha.equals(senha)) {
            sessão.setAttribute("erroSenhaeConfirmarSenha", "Senhas não conferem");
            contadorErro++;
            System.out.println("Senhas nao conferem");
        }

        //verifica se ja tem login com endereco proposto abaixo
        //  List<Usuario> u = new ArrayList<Usuario>();
        List<Usuario> u = new UsuarioDao().getPorString("login=" + login);

        if (u.isEmpty() == false) {
            sessão.setAttribute("erroLoginExistente", "Login já cadastrado");
            contadorErro++;
            System.out.println("Login existente!");
        } else {
            usuarioSetarCampo.setLogin(login);
        }

        usuarioSetarCampo.setTelefone1(telefone1);
        usuarioSetarCampo.setTelefone2(telefone2);

        //verifica se tem ao menos um horario selecionado
        int contadoErroHorarioLivre = 0;

        for (int i = 1; i <= 7; i++) {
            diaSemana = retornadiaSemana(i);

            for (int f = 8; f <= 24; f++) {
                String horario = f + diaSemana;
                horarioLivre = request.getParameter(horario);
                System.out.println(horario + ": " + horarioLivre);

                //se o horario livre, estiver selecionado, grava no banco
                if (horarioLivre == null) {
                    contadoErroHorarioLivre++;


                }

            }
        }

        if (contadoErroHorarioLivre >= 119) {
            sessão.setAttribute("erroHorarioLivre", "Selecione ao menos um horario!");
            contadorErro++;
        }

        System.out.println("contadorErroHorarioLivre = " + contadoErroHorarioLivre);

        //se houver algum erro na pagina
        if (contadorErro > 0) {


            sessão.setAttribute("usuarioSetarCampo", usuarioSetarCampo);
            response.sendRedirect("cadastro.jsp");
        } //so grava se todos os dados estiverem corretos
        else {





            new UsuarioDao(usuario).persist();

            for (int i = 1; i <= 7; i++) {
                diaSemana = retornadiaSemana(i);

                for (int f = 8; f <= 24; f++) {
                    String horario = f + diaSemana;
                    horarioLivre = request.getParameter(horario);
                    System.out.println(horario + ": " + horarioLivre);

                    //se o horario livre, estiver selecionado, grava no banco
                    if (horarioLivre != null) {
                        new HorarioDoUsuarioDao(new HorarioDoUsuario(horario, usuario)).persist();
                    }

                }
            }
        }
        if (contadorErro == 0) {

            //primeira coisa a fazer:matar a sessao, para nao haver conflitos
            removeSessao(request);

            //sessao com os nomes de usuario para pagina welcome
            HttpSession sessao = request.getSession(true);
            sessao.setAttribute("usuario", usuario);
            response.sendRedirect("welcome.jsp");

        }
    }
}
